- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин
Шрифт:
Интервал:
Закладка:
Для получения не просто подтверждения от пользователя, а каких-либо данных, можно воспользоваться диалогом TextInputDialog, где можно получить строку, введенную пользователем.
Для выбора пользователем предустановленных опций можно использовать диалог ChoiceDialog.
Здесь вы в конструкторе диалога, либо методом getItems.addAll определяете список выбора.
И методом showAndWait получаете выбранный пользователем вариант.
Pagination
Элемент управления Pagination используется для навигации между страницами одного контента, который был разделен на более мелкие части.
Компонент Pagination состоит из содержимого страницы и управления навигацией между страницами.
Компонент Pagination создается с помощью конструктора, в котором можно указать количество страниц контента и индекс открытой страницы.
Количество страниц контента и индекс открытой страницы также можно указать методами setPageCount и setCurrentPageIndex.
Ограничить количество отображаемых кнопок страниц в компоненте можно методом setMaxPageIndicatorCount.
Контент страниц компонента Pagination заполняется с помощью фабрики, которая устанавливается методом setPageFactory.
На вход фабрика получает индекс страницы, которую выбирает пользователь для отображения, нажимая кнопку навигации, а на выход фабрика выдает узел контента страницы.
В этом примере у нас есть текст, разбитый на фрагменты, и мы в методе itemsPerPage определяем, что на каждой странице у нас будет один фрагмент.
На основе количества фрагментов мы рассчитываем, сколько у нас будет страниц и передаем эту цифру в конструктор компонента Pagination.
Методом setMaxPageIndicatorCount мы устанавливаем, что в панели навигации будет отображаться только 5 кнопок.
В фабрике мы вызываем метод createPage, в котором формируем узел, отображающий текст фрагмента страницы.
ButtonBar
Компонент ButtonBar представляет собой специализированную панель для размещения кнопок в конкретной операционной системе.
Любой узел Node может быть аннотирован с помощью метода setButtonData и помещен в панель ButtonBar, с помощью метода getButtons.addAll.
При этом размещение этого узла относительно других узлов будет определяться на основе его аннотации, а также общего порядка кнопок, определенного для панели ButtonBar.
Общий порядок кнопок устанавливается для панели ButtonBar устанавливается методом setButtonOrder с использованием констант BUTTON_ORDER_WINDOWS, BUTTON_ORDER_MAC_OS, и BUTTON_ORDER_LINUX, и является специфическим для конкретной операционной системы.
Например, для Windows порядка, кнопка с аннотацией Yes появится перед кнопкой с аннотацией No, тогда как для Linux и Mac OS порядка это будет наоборот.
По умолчанию все кнопки имеют одинаковый размер в панели ButtonBar, и это означает, что все кнопки имеют ширину самой широкой кнопки.
Вы можете отказаться от этого для каждой кнопки, вызывая метод setButtonUniformSize со значением false.
Панель SplitPane
Компонент SplitPane представляет собой панель с горизонтальным или вертикальным набором разделенных частей.
Панель SplitPane содержит набор дочерних узлов ObservableList, заполнить который можно с помощью метода getItems.addAll класса SplitPane.
Каждый дочерний узел панели SplitPane помещается в свою область, отделенную от других частей панели разделителями.
Количество разделенных частей определяется количеством дочерних узлов панели SplitPane.
Если дочерний узел заполняет не все пространство своей части панели, пользователь может мышкой сдвигать разделители частей панели.
Задавать расположение разделителей частей панели SplitPane можно с помощью метода setDividerPosition или методом setDividerPositions, или заполняя набор ObservableList разделителей методом getDividers.addAll.
Позиция разделителя представляет собой число между 0.0 и 1.0.
В этом примере мы создаем панель с двумя разделенными частями, при этом левая часть панели также разделена на две части, разделитель которых можно сдвигать мышкой.
Spinner
Компонент Spinner представляет собой однострочное текстовое поле, которое позволяет пользователю выбирать число или значение объекта из упорядоченной последовательности.
Спиннер похож на комбинированное поле combo box и список, которые позволяют пользователю выбирать из диапазона значений.
Как и редактируемые комбинированные поля combo box, спиннеры позволяют пользователю вводить свое значение в поле.
Но в отличие от комбинированных полей combo box, у спиннеров нет раскрывающегося списка.
Так как спиннеры не отображают все возможные значения – отображается только текущее значение – они часто используются вместо комбинированных полей или списков, когда набор возможных значений большой, чтобы выпадающим списком не закрывать другие компоненты интерфейса.
Последовательность значений спиннера определяется его фабрикой SpinnerValueFactory, которая устанавливается либо в конструкторе, либо методом setValueFactory.
Существуют три предустановленных фабрики для трех типов последовательностей значений спиннера.
Это IntegerSpinnerValueFactory для последовательности целых значений.
DoubleSpinnerValueFactory для последовательности значений типа double.
И ListSpinnerValueFactory для последовательности значений ObservableList, это обычно значения типа String.
У Spinner есть дочерний компонент TextField, который отвечает за отображение и потенциальное изменение текущего значения Spinner, и этот компонент называется редактором.
По умолчанию Spinner не редактируется, но это можно изменить, если для свойства editable установить значение true.
Редактор Spinner синхронизируется с фабрикой SpinnerValueFactory, слушая изменения свойства value фабрики значений.
Если пользователь изменил значение, отображаемое в редакторе, пользователь должен зафиксировать редактирование с помощью клавиши «Enter».
На слайде показано создание спиннеров для трех типов значений – int, double и String.
Для создания спиннера с последовательностью произвольных объектов, создается фабрика SpinnerValueFactory с переопределенными методами decrement и increment, а объект должен иметь переопределенный метод toString.
С помощью предустановленных классов спиннера и метода getStyleClass.add можно поменять расположение кнопок спиннера относительно поля значения.
Для создания редактируемого спиннера, сначала мы должны вызвать метод setEditable (true).
Так как поле спиннера принимает на вход строки, мы должны установить для фабрики значений преобразователь между строками и значениями последовательности спиннера.
Делаем мы это методом setConverter, в котором указываем преобразователь с определенными методами toString и fromString.
Далее мы присоединяем к полю спиннера, которое является редактором, слушатель нажатия клавиши Enter.
В котором извлекаем строку, введенную пользователем, и преобразуем ее в значение последовательности спиннера.
Далее, если значение не входит в последовательность, мы добавляем это значение.
Если такое значение уже есть, мы устанавливаем его как текущее.
Для последовательности типа String, все это уже определено по умолчанию.
Для обработки выбора пользователем значения, мы присоединяем к свойству value спиннера слушателя изменения свойства, в обработчике которого получаем выбранное значение.
Задание
Создайте спиннер с использованием модели данных и пользовательской фабрикой значений.
Панель ToolBar
Компонент ToolBar представляет панель инструментов, состоящую из горизонтального или вертикального набора узлов Node.
Свойство компонента orientation определяет горизонтальное или вертикальное расположение панели инструментов.
Панель ToolBar содержит набор дочерних узлов ObservableList, заполнить который можно с помощью метода getItems.addAll класса ToolBar.
Для создания панели инструментов, сначала создаются элементы управления, а затем они добавляются в панель инструментов.
Задание

